Conventional flash based Solid State Devices (SSDs) provide a persistent medium like Hard Disk Drives (HDDs) to store data. SSDs that have no mechanically moving parts tend to have improved yields and/or different performance characteristics from HDDs. SDDs are typically not commonly deployed in enterprise configurations due to the high cost per unit data density. However, in recent years there has been increased adoption of SSDs in enterprise storage configurations that handle high performance workloads.
A conventional SSD used as a storage device can be made from multiple flash packages that are connected to a controller. Read/Write performance characteristics of flash based SSDs vary. A read/write to a 2 GB SSD flash is performed at a page level granularity. A read to a page (i.e., 4/8 contiguous blocks) is a low latency operation (i.e., ˜25 μs), which is less than the latency of a HDD. A write to an empty page is a program only operation (˜300 μs). A re-write to a page is a sequence of an erase operation, than a program operation. After a physical page is written, the page is erased before any subsequent writes. An erase operation cannot be performed at a page granularity. Rather, an erase is performed at a block level. A block erase operation takes about 2 ms.
Over time, the SSD media will eventually run out of adequate free blocks as the data grows and becomes scattered across the blocks. Lack of free blocks can cause multiple re-writes, which in turn creates multiple blocks of erase and program operations. Write throughput falls over time. Most of the writes to a page or a partial page (even a byte of data in a page) would result in erase (block) and program (page) sequences, resulting in very high write latency.
The above phenomena can be detrimental to the write endurance limit of the flash drives. In large enterprise implementations, data workloads are committed to the disk in a small window of time. The SSD media firmware can commit data irrespective of size or block affinity, resulting in numerous low efficiency writes (i.e., partial page of data commit in a largely filled flash device).
It would be desirable to implement a controller to rank or prioritize the pending data commits to a SSD to achieve optimal efficiency at each transaction. It would also be desirable to complete high efficiency writes before low efficiency writes, to implement a controller that does not allow high efficiency writes to lag low efficient writes and to achieve high write throughput per unit of time.